import store from '@/store'
import config from '@/config'
import { getAccessToken,getRefreshToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import { toast, showConfirm, tansParams } from '@/utils/common'
// import axios from 'axios'
// let requestList = [] 
// let isRefreshToken = false 
// const service = axios.create({
//     withCredentials: true,
//     crossDomain: true,
//     timeout: 10000,
// 		headers:{
// 			'tenant-id':'1',
// 			'Authorization':getAccessToken()?'Bearer ' + getAccessToken():''
// 		}
// })
// const baseUrl = config.baseUrl
// //刷新token
// const refreshToken = () => {
//   return service.post('/admin-api/system/auth/refresh-token', { refreshToken: getAccessToken() }, true)
// }

// // request拦截器,在请求之前做一些处理
// service.interceptors.request.use(
//     config => {
//         // 是否需要设置 token
//         const isToken = (config.headers || {}).isToken === false
//         config.header = config.header || {}
//         if (getAccessToken() && !isToken) {
//           config.header['Authorization'] = 'Bearer ' + getAccessToken()
//         }
//         // 设置租户 TODO 芋艿：强制 1 先
//         config.header['tenant-id'] = '1';
// 				// get请求映射params参数
// 				if(config.method == 'get' && config.data){
// 					console.log(config.url)
// 					let url = config.url + '?' + tansParams(config.data)
// 					url = url.slice(0, -1)
// 					config.url = url
// 				}
// 				config.url = baseUrl + config.url
//         return config;
//     },
//     error => {
//         console.log(error); // for debug
//         return Promise.reject(error);
//     }
// );
// //配置成功后的拦截器
// service.interceptors.response.use(res => {
// 		const code = res.data.code || 200
// 		const msg = errorCode[code] || res.data.msg || errorCode['default']
// 		if (code === 401) {
// 			 if(!isRefreshToken) {
// 					isRefreshToken = true
// 					// getRefreshToken()
// 					return refreshToken().then(res=>{
// 						uni.setStorageSync('AccessTokenKey', res.refreshToken)
// 						console.log(requestList)
// 						requestList.forEach(cb => cb()) // 调用token刷新过程中的挂起请求
// 						requestList = []
// 						isRefreshToken = false
// 						return service(config)
// 					})
// 			}
// 			//reject('无效的会话，或者会话已过期，请重新登录。')
// 		}else{
// 			// return new Promise(resolve => {
// 			// 	requestList.push(() => {    // 一个执行resolve的函数
// 			// 		config.header.Authorization = 'bearer '   + getAccessToken()
// 			// 		resolve(service(config))
// 			// 	})
// 			// })
// 			return res.data
// 		}
		
		
//     // if (res.data.status == 200) {
// 				// console.log(res.data)
//     //     return res.data
//     // } else {
// 				// console.log(res.data)
//     //     return Promise.reject(res.data.msg);
//     // }
// }, error => {
//     return Promise.reject(error)
// })
// axios.defaults.adapter = function(config) {
//     return new Promise((resolve, reject) => {
//         //var settle = require('axios/lib/core/settle');
//         //var buildURL = require('axios/lib/helpers/buildURL');
//         uni.request({
//             method: config.method.toUpperCase(),
//             url: config.baseUrl,
//             header: config.headers,
//             data: config.data,
//             dataType:'json',
//             sslVerify: config.sslVerify,
//             complete: function complete(response) {
//                 console.log("执行完成：",response)
//                 response = {
//                     data: response.data,
//                     status: response.statusCode,
//                     errMsg: response.errMsg,
//                     header: response.header,
//                     config: config
//                 };

//             }
//         })
//     })
// }
// export default service
// return
let timeout = 10000
const baseUrl = config.baseUrl

const request = config => {
  // 是否需要设置 token
  const isToken = (config.headers || {}).isToken === false
  config.header = config.header || {}
  if (getAccessToken() && !isToken) {
    config.header['Authorization'] = 'Bearer ' + getAccessToken()
  }
  // 设置租户 TODO 芋艿：强制 1 先
  config.header['tenant-id'] = '1';
  // get请求映射params参数
  if (config.params) {
    let url = config.url + '?' + tansParams(config.params)
    url = url.slice(0, -1)
    config.url = url
  }
  return new Promise((resolve, reject) => {
    uni.request({
        method: config.method || 'get',
        timeout: config.timeout ||  timeout,
        url: config.baseUrl || baseUrl + config.url,
        data: config.data,
        // header: config.header,
        header: config.header,
        dataType: 'json'
      }).then(response => {
        let [error, res] = response
        if (error) {
          toast('后端接口连接异常')
          reject('后端接口连接异常')
          return
        }
        const code = res.data.code || 200
        const msg = errorCode[code] || res.data.msg || errorCode['default']
        if (code === 401) {
          showConfirm('登录状态已过期，您可以继续留在该页面，或者重新登录?').then(res => {
            if (res.confirm) {
              store.dispatch('LogOut').then(res => {
                uni.reLaunch({ url: '/pages/login' })
              })
            }
          })
          reject('无效的会话，或者会话已过期，请重新登录。')
        } else if (code === 500) {
          toast(msg)
          reject('500')
        } else if (code !== 200) {
          toast(msg)
          reject(code)
        }
        resolve(res.data)
      })
      .catch(error => {
        let { message } = error
        if (message === 'Network Error') {
          message = '后端接口连接异常'
        } else if (message.includes('timeout')) {
          message = '系统接口请求超时'
        } else if (message.includes('Request failed with status code')) {
          message = '系统接口' + message.substr(message.length - 3) + '异常'
        }
        toast(message)
        reject(error)
      })
  })
}

export default request
